MODUL AJAR

JAVA PROGRAMMING

Panduan Lengkap Pemrograman Java
dari Dasar hingga Mahir
Disusun oleh: Tim Pengembangan Kurikulum
Program Studi Teknik Informatika
@2024

i KATA PENGANTAR

Puji syukur ke hadirat Tuhan Yang Maha Esa, karena atas berkat dan rahmat-Nya, modul ajar "Java Programming Lengkap dengan Praktikum" dapat diselesaikan dengan baik. Modul ini dirancang sebagai panduan komprehensif untuk mempelajari bahasa pemrograman Java, mulai dari konsep dasar hingga implementasi praktis.

Java merupakan salah satu bahasa pemrograman paling populer dan banyak digunakan di dunia. Dengan prinsip "Write Once, Run Anywhere", Java menjadi pilihan utama dalam pengembangan aplikasi enterprise, mobile (Android), desktop, dan berbagai platform lainnya.

Modul ini disusun secara sistematis dengan pendekatan pembelajaran berbasis praktikum. Setiap materi dilengkapi dengan:

  • Tujuan pembelajaran yang jelas
  • Penjelasan teori dengan contoh konkret
  • Kode program dengan berbagai variasi
  • Praktikum langkah demi langkah
  • Latihan dan studi kasus

Kami berharap modul ini dapat membantu mahasiswa, pengajar, dan praktisi dalam menguasai pemrograman Java. Kritik dan saran yang membangun sangat kami harapkan untuk penyempurnaan modul ini di masa mendatang.

Jakarta, Januari 2024

Tim Penyusun

DAFTAR ISI

1 Java HOME 1
2 Java Intro 4
3 Java Get Started 7
4 Java Syntax 10
5 Java Output 13
6 Java Comments 16
7 Java Variables 18
8 Java Data Types 22
9 Java Type Casting 26
10 Java Operators 29
11 Java Strings 33
12 Java Math 37
13 Java Booleans 40
14 Java If...Else 43
15 Java Switch 47
16 Java While Loop 50
17 Java For Loop 53
18 Java Break/Continue 57
19 Java Arrays 60
A Studi Kasus: Aplikasi Bank 65
B Glosarium 70
C Daftar Pustaka 72
D Index 73

1 JAVA HOME

Kompetensi Dasar

  • Memahami sejarah dan perkembangan Java
  • Mengenal fitur-fitur utama Java
  • Memahami konsep platform independence

A. Pengenalan Java

1. Sejarah Java

Java dikembangkan oleh James Gosling dan timnya di Sun Microsystems pada tahun 1991. Awalnya bernama "Oak", kemudian diubah menjadi Java pada tahun 1995. Java dirancang dengan moto "Write Once, Run Anywhere" (WORA).

Tahun Perkembangan Java
1991 Proyek "Oak" dimulai oleh James Gosling
1995 Java 1.0 dirilis secara resmi
1998 Java 2 (J2SE 1.2) dengan Swing GUI
2004 Java 5 (Tiger) dengan generics, enum, foreach
2011 Java 7 dengan try-with-resources
2014 Java 8 dengan lambda expressions
2017 Java 9 dengan module system
2018 Java 10 dengan local variable type inference
2024 Java 21 (LTS terbaru)

2. Fitur-fitur Java

  • Sederhana: Sintaks mirip C++ tetapi lebih bersih
  • Berorientasi Objek: Hampir semua adalah objek
  • Platform Independence: Kode Java dijalankan di JVM
  • Multithreading: Mendukung pemrograman konkuren
  • Automatic Memory Management: Garbage collection
  • Secure: Tidak ada pointer, bytecode verification
  • Robust: Strong typing, exception handling

B. Arsitektur Java

Komponen Utama Java

  • JDK (Java Development Kit): Tools untuk mengembangkan aplikasi Java
  • JRE (Java Runtime Environment): Library dan JVM untuk menjalankan Java
  • JVM (Java Virtual Machine): Mesin virtual yang menjalankan bytecode

Proses Eksekusi Program Java

  1. Source code (.java) ditulis oleh programmer
  2. Compiler (javac) mengubah menjadi bytecode (.class)
  3. Bytecode dijalankan oleh JVM
  4. JVM menerjemahkan ke instruksi mesin

⚑ Praktikum 1: Cek Instalasi Java

1 Buka Terminal/Command Prompt

Tekan Windows + R, ketik "cmd" untuk Windows, atau buka Terminal di Mac/Linux

2 Cek versi Java
java -version

Output yang diharapkan:

java version "21.0.1" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 21.0.1+12-LTS-29)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.1+12-LTS-29, mixed mode, sharing)
3 Cek compiler Java
javac -version

Output yang diharapkan:

javac 21.0.1
πŸ“Œ Catatan Penting:
  • Java bersifat case-sensitive (membedakan huruf besar/kecil)
  • Nama file .java harus sama persis dengan nama class public
  • Setiap program Java membutuhkan method main() sebagai entry point
1

2 JAVA INTRODUCTION

A. Konsep Dasar Java

Struktur Program Java

public class NamaKelas {
    public static void main(String[] args) {
        // Kode program di sini
        System.out.println("Hello Java!");
    }
}

Penjelasan:

  • public class - Mendeklarasikan class dengan nama tertentu
  • public static void main - Method utama yang dijalankan pertama kali
  • String[] args - Parameter untuk command line arguments
  • System.out.println - Mencetak output ke console

⚑ Praktikum 2: Program Java Pertama

Langkah-langkah:

1 Buat file HelloWorld.java

Gunakan text editor (Notepad, VS Code, IntelliJ, dll)

2 Tulis kode berikut:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Selamat Datang di Java!");
        System.out.println("Ini program pertamaku.");
        System.out.print("Belajar Java ");
        System.out.print("sangat menyenangkan!");
    }
}
3 Kompilasi program
javac HelloWorld.java

Jika berhasil, akan menghasilkan file HelloWorld.class

4 Jalankan program
java HelloWorld
5 Output yang dihasilkan:
Selamat Datang di Java!
Ini program pertamaku.
Belajar Java sangat menyenangkan!
πŸ’‘ Pro Tip:

Gunakan IDE seperti Eclipse, IntelliJ IDEA, atau NetBeans untuk mempermudah development. IDE akan membantu dalam syntax highlighting, auto-completion, dan debugging.

4

3 JAVA GET STARTED

A. Instalasi Java Development Kit (JDK)

Langkah-langkah Instalasi:

Untuk Windows:
  1. Download JDK dari https://www.oracle.com/java/technologies/downloads/
  2. Pilih versi terbaru (Java 21 LTS)
  3. Jalankan installer dan ikuti petunjuk
  4. Set environment variable JAVA_HOME
  5. Tambah %JAVA_HOME%\bin ke PATH
Untuk Linux (Ubuntu/Debian):
sudo apt update
sudo apt install openjdk-21-jdk
java -version
Untuk macOS:
brew install openjdk@21
java -version

⚑ Praktikum 3: Setup Environment

Praktikum 3.1: Setting Environment Variable di Windows

1 Cari lokasi instalasi JDK

Biasanya di: C:\Program Files\Java\jdk-21

2 Buka System Properties

Klik kanan This Computer β†’ Properties β†’ Advanced System Settings β†’ Environment Variables

3 Tambah JAVA_HOME

New System Variable: JAVA_HOME = C:\Program Files\Java\jdk-21

4 Update PATH

Tambah %JAVA_HOME%\bin ke PATH variable

Praktikum 3.2: Program dengan Command Line Arguments

public class CommandLineDemo {
    public static void main(String[] args) {
        System.out.println("Jumlah argument: " + args.length);
        
        if (args.length > 0) {
            System.out.println("Argument yang diberikan:");
            for (int i = 0; i < args.length; i++) {
                System.out.println("args[" + i + "] = " + args[i]);
            }
        } else {
            System.out.println("Tidak ada argument yang diberikan");
        }
    }
}

Kompilasi dan jalankan:

javac CommandLineDemo.java
java CommandLineDemo Hello World 123

Output:

Jumlah argument: 3
Argument yang diberikan:
args[0] = Hello
args[1] = World
args[2] = 123
7

4 JAVA SYNTAX

A. Aturan Dasar Syntax Java

1. Case Sensitivity

Java membedakan huruf besar dan kecil. "nama" berbeda dengan "Nama" dan "NAMA".

2. Nama Class

  • Harus diawali huruf kapital (konvensi)
  • Nama file harus sama dengan nama class
  • Tidak boleh menggunakan keyword Java

3. Method main

Method main adalah entry point program Java. Harus ditulis persis:

public static void main(String[] args)

4. Blok Kode

Blok kode diapit dengan kurung kurawal { }

public class Contoh {
    public static void main(String[] args) {
        {  // Ini juga blok
            int x = 10;
            System.out.println(x);
        }  // Variable x tidak bisa diakses di luar blok ini
    }
}

⚑ Praktikum 4: Berbagai Contoh Syntax

Praktikum 4.1: Demo Syntax Java

public class SyntaxDemo {
    
    // Variable class (static)
    static int counter = 0;
    
    // Variable instance
    int instanceVar;
    
    // Constructor
    public SyntaxDemo(int value) {
        this.instanceVar = value;
        counter++;
    }
    
    // Method dengan parameter dan return value
    public int tambah(int a, int b) {
        int hasil = a + b;  // Variable lokal
        return hasil;
    }
    
    // Static method
    public static void tampilkanCounter() {
        System.out.println("Counter: " + counter);
    }
    
    public static void main(String[] args) {
        // Membuat object
        SyntaxDemo obj1 = new SyntaxDemo(100);
        SyntaxDemo obj2 = new SyntaxDemo(200);
        
        // Memanggil method
        int jumlah = obj1.tambah(50, 30);
        System.out.println("Hasil penjumlahan: " + jumlah);
        
        // Mengakses variable
        System.out.println("Instance var obj1: " + obj1.instanceVar);
        System.out.println("Instance var obj2: " + obj2.instanceVar);
        
        // Memanggil static method
        tampilkanCounter();
        
        // Block scope demonstration
        int x = 10;
        {
            int y = 20;  // y hanya bisa diakses dalam blok ini
            System.out.println("x dalam blok: " + x);
            System.out.println("y dalam blok: " + y);
        }
        // System.out.println(y);  // ERROR! y tidak dikenal di sini
    }
}
⚠️ Error Umum Syntax:
  • Lupa titik koma (;) di akhir statement
  • Kurung kurawal tidak berpasangan
  • Nama class tidak sama dengan nama file
  • Method main salah penulisan
10

5 JAVA OUTPUT

A. System.out

1. print() vs println()

  • print() - Mencetak tanpa baris baru
  • println() - Mencetak dengan baris baru

2. printf() - Format Output

Method printf() digunakan untuk output dengan format tertentu.

Format Specifier Deskripsi
%d Integer desimal
%f Float/double
%s String
%c Character
%b Boolean
%n New line

⚑ Praktikum 5: Berbagai Cara Output

Praktikum 5.1: Demo Output Methods

public class OutputDemo {
    public static void main(String[] args) {
        // 1. println() - dengan baris baru
        System.out.println("Ini dengan println");
        System.out.println("Ini baris kedua");
        
        // 2. print() - tanpa baris baru
        System.out.print("Ini dengan print ");
        System.out.print("akan disambung");
        System.out.println(); // pindah baris
        
        // 3. printf() - format output
        String nama = "Budi";
        int umur = 20;
        double tinggi = 175.5;
        boolean aktif = true;
        
        System.out.printf("Nama: %s, Umur: %d tahun%n", nama, umur);
        System.out.printf("Tinggi: %.1f cm%n", tinggi);
        System.out.printf("Status aktif: %b%n", aktif);
        
        // 4. Format angka
        double harga = 1234567.89123;
        System.out.printf("Harga: Rp %,.2f%n", harga);
        
        // 5. Alignment
        System.out.printf("%-10s %10s %n", "Nama", "Nilai");
        System.out.printf("%-10s %10d %n", "Budi", 85);
        System.out.printf("%-10s %10d %n", "Ani", 92);
        System.out.printf("%-10s %10d %n", "Candra", 78);
        
        // 6. Output dengan escape sequences
        System.out.println("Baris 1\nBaris 2");  // newline
        System.out.println("Tab\tantara kata");    // tab
        System.out.println("Backslash: \\");        // backslash
        System.out.println("Petik satu: \'");       // single quote
        System.out.println("Petik dua: \"");        // double quote
        
        // 7. Output unicode
        System.out.println("Halo dalam berbagai bahasa:");
        System.out.println("Indonesia: Selamat datang");
        System.out.println("Jepang: こんにけは");
        System.out.println("China: δ½ ε₯½");
        System.out.println("Korea: μ•ˆλ…•ν•˜μ„Έμš”");
        
        // 8. Output dengan waktu
        System.out.printf("Tanggal: %tF%n", System.currentTimeMillis());
        System.out.printf("Waktu: %tT%n", System.currentTimeMillis());
    }
}

Output Program:

Ini dengan println
Ini baris kedua
Ini dengan print akan disambung
Nama: Budi, Umur: 20 tahun
Tinggi: 175.5 cm
Status aktif: true
Harga: Rp 1,234,567.89
Nama Nilai
Budi 85
Ani 92
Candra 78
Baris 1
Baris 2
Tab antara kata
Backslash: \
Petik satu: '
Petik dua: "
Halo dalam berbagai bahasa:
Indonesia: Selamat datang
Jepang: こんにけは
China: δ½ ε₯½
Korea: μ•ˆλ…•ν•˜μ„Έμš”
Tanggal: 2024-01-15
Waktu: 14:30:45
πŸ’‘ Pro Tip:

Gunakan printf() untuk membuat output yang rapi dan terformat, terutama untuk membuat tabel atau laporan.

13

6 JAVA COMMENTS

A. Jenis Komentar di Java

Jenis Syntax Contoh
Single-line // ... // Ini komentar satu baris
Multi-line /* ... */ /* Ini komentar
beberapa baris */
Documentation (Javadoc) /** ... */ /** Dokumentasi untuk
method atau class */

⚑ Praktikum 6: Penggunaan Komentar

Praktikum 6.1: Demo Komentar dan Javadoc

/**
 * Kelas Kalkulator untuk melakukan operasi matematika sederhana.
 * Kelas ini mendemonstrasikan penggunaan Javadoc comments.
 * 
 * @author Tim Pengembang
 * @version 1.0
 * @since 2024
 */
public class Kalkulator {
    
    /**
     * Konstanta untuk nilai PI
     */
    public static final double PI = 3.14159;
    
    /**
     * Menjumlahkan dua bilangan bulat.
     *
     * @param a bilangan pertama
     * @param b bilangan kedua
     * @return hasil penjumlahan a dan b
     */
    public int tambah(int a, int b) {
        // Variable lokal untuk menyimpan hasil
        int hasil = a + b;
        return hasil;
    }
    
    /**
     * Menghitung luas lingkaran.
     *
     * @param jariJari jari-jari lingkaran
     * @return luas lingkaran
     * @throws IllegalArgumentException jika jariJari <= 0
     */
    public double luasLingkaran(double jariJari) {
        /* Validasi input
           Memastikan jari-jari bernilai positif */
        if (jariJari <= 0) {
            throw new IllegalArgumentException("Jari-jari harus positif");
        }
        
        // Menghitung luas: Ο€ * rΒ²
        return PI * jariJari * jariJari;
    }
    
    /**
     * Method utama untuk menjalankan program.
     *
     * @param args command line arguments
     */
    public static void main(String[] args) {
        // Membuat objek kalkulator
        Kalkulator calc = new Kalkulator();
        
        /* Demonstrasi penggunaan method
           Menampilkan hasil perhitungan */
        System.out.println("5 + 3 = " + calc.tambah(5, 3));
        System.out.println("Luas lingkaran r=7: " + calc.luasLingkaran(7));
    }
}

Praktikum 6.2: Generate Javadoc

1 Generate dokumentasi dari command line:
javadoc -d doc Kalkulator.java
2 Buka file index.html di folder doc untuk melihat dokumentasi
πŸ“Œ Best Practice Komentar:
  • Gunakan komentar untuk menjelaskan "mengapa", bukan "apa"
  • Selalu update komentar saat kode berubah
  • Gunakan Javadoc untuk API publik
  • Jangan komentari kode yang sudah jelas
16

7 JAVA VARIABLES

A. Variable di Java

1. Deklarasi Variable

tipeData namaVariable = nilai;

2. Aturan Penamaan Variable

  • Diawali huruf, underscore (_), atau dollar ($)
  • Karakter berikutnya bisa huruf, angka, underscore, dollar
  • Case-sensitive (nama β‰  Nama)
  • Tidak boleh menggunakan keyword Java
  • Konvensi: camelCase untuk variable (namaLengkap)

3. Jenis Variable Berdasarkan Scope

Jenis Scope Contoh
Local Di dalam method/blok int x = 10;
Instance Di dalam class, tanpa static int umur;
Static Di dalam class, dengan static static int counter;

⚑ Praktikum 7: Variable dan Scope

Praktikum 7.1: Demonstrasi Variable

public class VariableDemo {
    
    // Instance variables
    String nama;
    int umur;
    double gaji;
    
    // Static/Class variables
    static String perusahaan = "PT Java Corp";
    static int jumlahKaryawan = 0;
    
    // Constructor
    public VariableDemo(String nama, int umur, double gaji) {
        this.nama = nama;
        this.umur = umur;
        this.gaji = gaji;
        jumlahKaryawan++;
    }
    
    // Method untuk menampilkan info
    public void tampilkanInfo() {
        // Local variables
        String jabatan = "Staf";
        double bonus = gaji * 0.1;
        double totalGaji = gaji + bonus;
        
        System.out.println("=== Data Karyawan ===");
        System.out.println("Nama: " + nama);
        System.out.println("Umur: " + umur + " tahun");
        System.out.println("Jabatan: " + jabatan);
        System.out.printf("Gaji Pokok: Rp %,.2f%n", gaji);
        System.out.printf("Bonus: Rp %,.2f%n", bonus);
        System.out.printf("Total Gaji: Rp %,.2f%n", totalGaji);
    }
    
    public static void main(String[] args) {
        // Local variables di main
        int tahunSekarang = 2024;
        
        // Membuat object
        VariableDemo karyawan1 = new VariableDemo("Budi Santoso", 30, 5000000);
        VariableDemo karyawan2 = new VariableDemo("Ani Wijaya", 28, 6000000);
        VariableDemo karyawan3 = new VariableDemo("Citra Dewi", 32, 7500000);
        
        // Memanggil method
        karyawan1.tampilkanInfo();
        System.out.println();
        karyawan2.tampilkanInfo();
        System.out.println();
        karyawan3.tampilkanInfo();
        
        // Mengakses static variable
        System.out.println("\n=== Informasi Perusahaan ===");
        System.out.println("Nama Perusahaan: " + perusahaan);
        System.out.println("Tahun: " + tahunSekarang);
        System.out.println("Jumlah Karyawan: " + jumlahKaryawan);
        
        // Demonstrasi final variable (konstanta)
        final double PAJAK = 0.1;
        System.out.println("Pajak: " + (PAJAK * 100) + "%");
        // PAJAK = 0.2;  // ERROR! tidak bisa mengubah final variable
        
        // Demonstrasi block scope
        {
            int x = 100;
            System.out.println("x dalam blok: " + x);
        }
        // System.out.println(x);  // ERROR! x tidak dikenal di sini
    }
}
πŸ’‘ Pro Tip:
  • Gunakan nama variable yang deskriptif (namaLengkap, bukan nl)
  • Inisialisasi variable sebelum digunakan
  • Gunakan final untuk konstanta
  • Perhatikan scope variable untuk menghindari error
18

8 JAVA DATA TYPES

A. Tipe Data Primitif

Tipe Ukuran Range/Deskripsi Default
byte 1 byte -128 s/d 127 0
short 2 byte -32,768 s/d 32,767 0
int 4 byte -2^31 s/d 2^31-1 0
long 8 byte -2^63 s/d 2^63-1 0L
float 4 byte ~ Β±3.4E+38F 0.0f
double 8 byte ~ Β±1.8E+308 0.0d
char 2 byte 0 s/d 65,535 (Unicode) '\u0000'
boolean 1 bit true atau false false

B. Tipe Data Reference

  • String, Array, Class, Interface, Enum
  • Default value: null
  • Disimpan di heap memory

⚑ Praktikum 8: Data Types Demo

Praktikum 8.1: Demonstrasi Semua Tipe Data

public class DataTypesDemo {
    public static void main(String[] args) {
        System.out.println("=== Tipe Data Primitif ===\n");
        
        // 1. Integer types
        byte b = 127;
        short s = 32767;
        int i = 2147483647;
        long l = 9223372036854775807L;
        
        System.out.println("byte   : " + b + " (max: 127)");
        System.out.println("short  : " + s + " (max: 32767)");
        System.out.println("int    : " + i + " (max: 2.1M)");
        System.out.println("long   : " + l + " (max: 9.2E18)");
        
        // 2. Floating point types
        float f = 3.14159f;
        double d = 3.141592653589793;
        
        System.out.println("\nfloat  : " + f + " (presisi 6-7 digit)");
        System.out.println("double : " + d + " (presisi 15 digit)");
        
        // 3. Character type
        char c1 = 'A';
        char c2 = 65;  // ASCII value untuk 'A'
        char c3 = '\u0041';  // Unicode untuk 'A'
        
        System.out.println("\nchar   : " + c1);
        System.out.println("char(65): " + c2);
        System.out.println("char(\\u0041): " + c3);
        
        // 4. Boolean type
        boolean bool1 = true;
        boolean bool2 = false;
        boolean bool3 = (10 > 5);
        
        System.out.println("\nboolean: " + bool1);
        System.out.println("boolean: " + bool2);
        System.out.println("boolean(10>5): " + bool3);
        
        // 5. Reference types
        String str = "Hello Java";
        Integer num = 100;  // Wrapper class
        Double price = 99.99;  // Wrapper class
        Object obj = new Object();
        int[] arr = {1, 2, 3, 4, 5};
        
        System.out.println("\n=== Tipe Data Reference ===");
        System.out.println("String : " + str);
        System.out.println("Integer: " + num);
        System.out.println("Double : " + price);
        System.out.println("Array  : " + java.util.Arrays.toString(arr));
        
        // 6. Literals
        System.out.println("\n=== Literals ===");
        System.out.println("Binary 0b1010: " + 0b1010);  // Binary literal
        System.out.println("Octal 012: " + 012);        // Octal literal
        System.out.println("Hex 0xFF: " + 0xFF);         // Hex literal
        System.out.println("Underscore: " + 1_000_000);  // Underscore in numbers
        System.out.println("Scientific: " + 1.2e3);     // Scientific notation
        
        // 7. Type ranges
        System.out.println("\n=== Range Tipe Data ===");
        System.out.println("byte   : " + Byte.MIN_VALUE + " s/d " + Byte.MAX_VALUE);
        System.out.println("short  : " + Short.MIN_VALUE + " s/d " + Short.MAX_VALUE);
        System.out.println("int    : " + Integer.MIN_VALUE + " s/d " + Integer.MAX_VALUE);
        System.out.println("long   : " + Long.MIN_VALUE + " s/d " + Long.MAX_VALUE);
        System.out.println("float  : " + Float.MIN_VALUE + " s/d " + Float.MAX_VALUE);
        System.out.println("double : " + Double.MIN_VALUE + " s/d " + Double.MAX_VALUE);
    }
}
⚠️ Penting!
  • Hindari menggunakan float/double untuk perhitungan keuangan (gunakan BigDecimal)
  • Perhatikan overflow saat melakukan operasi dengan tipe data kecil
  • Gunakan tipe data yang sesuai dengan kebutuhan untuk menghemat memory
22

9 JAVA TYPE CASTING

A. Type Casting

1. Widening Casting (Otomatis)

Konversi dari tipe data kecil ke besar - dilakukan otomatis

byte β†’ short β†’ int β†’ long β†’ float β†’ double

2. Narrowing Casting (Manual)

Konversi dari tipe data besar ke kecil - harus manual

double β†’ float β†’ long β†’ int β†’ short β†’ byte

⚑ Praktikum 9: Casting Demo

Praktikum 9.1: Widening dan Narrowing Casting

public class CastingDemo {
    public static void main(String[] args) {
        System.out.println("=== Widening Casting (Otomatis) ===\n");
        
        int intValue = 100;
        System.out.println("int value   : " + intValue);
        
        long longValue = intValue;  // Otomatis int -> long
        System.out.println("long value  : " + longValue);
        
        float floatValue = intValue;  // Otomatis int -> float
        System.out.println("float value : " + floatValue);
        
        double doubleValue = intValue;  // Otomatis int -> double
        System.out.println("double value: " + doubleValue);
        
        System.out.println("\n=== Narrowing Casting (Manual) ===\n");
        
        double d = 100.99;
        System.out.println("double value: " + d);
        
        float f = (float) d;  // Manual casting double -> float
        System.out.println("float value : " + f);
        
        long l = (long) d;    // Manual casting double -> long
        System.out.println("long value  : " + l);
        
        int i = (int) d;      // Manual casting double -> int
        System.out.println("int value   : " + i);
        
        short s = (short) i;  // Manual casting int -> short
        System.out.println("short value : " + s);
        
        byte b = (byte) i;    // Manual casting int -> byte
        System.out.println("byte value  : " + b);
        
        System.out.println("\n=== Casting dengan Overflow ===\n");
        
        int besar = 130;
        byte kecil = (byte) besar;  // Overflow karena byte max 127
        System.out.println("int 130  -> byte: " + kecil);  // -126 (overflow)
        
        double pi = 3.14159;
        int piInt = (int) pi;  // Truncation (pemotongan, bukan pembulatan)
        System.out.println("double 3.14159 -> int: " + piInt);
        
        System.out.println("\n=== Casting dengan Char ===\n");
        
        char ch = 'A';
        int charInt = (int) ch;  // char -> int (ASCII value)
        System.out.println("char 'A' -> int: " + charInt);  // 65
        
        int num = 66;
        char numChar = (char) num;  // int -> char
        System.out.println("int 66 -> char: '" + numChar + "'");  // 'B'
        
        System.out.println("\n=== Casting String ke Numerik ===\n");
        
        String strNumber = "123";
        int parsedInt = Integer.parseInt(strNumber);
        double parsedDouble = Double.parseDouble(strNumber);
        
        System.out.println("String '123' -> int: " + parsedInt);
        System.out.println("String '123' -> double: " + parsedDouble);
        
        // Konversi numerik ke String
        int angka = 456;
        String strAngka = Integer.toString(angka);
        String strAngka2 = String.valueOf(angka);
        
        System.out.println("int 456 -> String: '" + strAngka + "'");
        System.out.println("int 456 -> String: '" + strAngka2 + "'");
        
        System.out.println("\n=== Casting Object ===\n");
        
        Object obj = "Hello Java";
        String strObj = (String) obj;  // Downcasting object ke string
        System.out.println("Object -> String: " + strObj);
        
        // Instanceof untuk safety casting
        if (obj instanceof String) {
            String safeStr = (String) obj;
            System.out.println("Safe casting: " + safeStr);
        }
    }
}
πŸ’‘ Pro Tip:
  • Selalu periksa dengan instanceof sebelum melakukan casting object
  • Waspada terhadap kehilangan data saat narrowing casting
  • Gunakan wrapper class methods untuk konversi string ke numerik
26

10 JAVA OPERATORS

A. Operator di Java

1. Operator Aritmatika

OperatorNamaContoh
+Penjumlahan5 + 3 = 8
-Pengurangan5 - 3 = 2
*Perkalian5 * 3 = 15
/Pembagian15 / 3 = 5
%Modulus7 % 3 = 1

2. Operator Penugasan

=, +=, -=, *=, /=, %=

3. Operator Perbandingan

==, !=, >, <, >=, <=

4. Operator Logika

&& (AND), || (OR), ! (NOT)

⚑ Praktikum 10: Semua Operator

Praktikum 10.1: Demo Operator

public class OperatorsDemo {
    public static void main(String[] args) {
        int a = 10, b = 3;
        
        System.out.println("=== Operator Aritmatika ===");
        System.out.println("a = " + a + ", b = " + b);
        System.out.println("a + b = " + (a + b));
        System.out.println("a - b = " + (a - b));
        System.out.println("a * b = " + (a * b));
        System.out.println("a / b = " + (a / b));
        System.out.println("a % b = " + (a % b));
        
        System.out.println("\n=== Operator Penugasan ===");
        int x = 5;
        System.out.println("x = " + x);
        x += 3;  System.out.println("x += 3 -> " + x);
        x -= 2;  System.out.println("x -= 2 -> " + x);
        x *= 4;  System.out.println("x *= 4 -> " + x);
        x /= 2;  System.out.println("x /= 2 -> " + x);
        x %= 3;  System.out.println("x %= 3 -> " + x);
        
        System.out.println("\n=== Operator Increment/Decrement ===");
        int y = 5;
        System.out.println("y = " + y);
        System.out.println("y++ : " + y++ + " (post-increment)");
        System.out.println("sekarang y = " + y);
        System.out.println("++y : " + ++y + " (pre-increment)");
        System.out.println("sekarang y = " + y);
        
        System.out.println("\n=== Operator Perbandingan ===");
        System.out.println("a == b: " + (a == b));
        System.out.println("a != b: " + (a != b));
        System.out.println("a > b : " + (a > b));
        System.out.println("a < b : " + (a < b));
        System.out.println("a >= b: " + (a >= b));
        System.out.println("a <= b: " + (a <= b));
        
        System.out.println("\n=== Operator Logika ===");
        boolean p = true, q = false;
        System.out.println("p && q: " + (p && q));
        System.out.println("p || q: " + (p || q));
        System.out.println("!p    : " + (!p));
        
        System.out.println("\n=== Operator Ternary ===");
        int umur = 20;
        String status = (umur >= 17) ? "Dewasa" : "Anak-anak";
        System.out.println("Umur " + umur + " -> " + status);
        
        System.out.println("\n=== Operator Bitwise ===");
        int m = 6;  // 110 biner
        int n = 3;  // 011 biner
        System.out.println("m & n  : " + (m & n) + " (AND)");
        System.out.println("m | n  : " + (m | n) + " (OR)");
        System.out.println("m ^ n  : " + (m ^ n) + " (XOR)");
        System.out.println("~m     : " + (~m) + " (NOT)");
        System.out.println("m << 1 : " + (m << 1) + " (shift left)");
        System.out.println("m >> 1 : " + (m >> 1) + " (shift right)");
    }
}
29

A STUDI KASUS: APLIKASI BANK

Membangun Aplikasi Bank Sederhana

Mengintegrasikan semua konsep Java yang telah dipelajari.

Class Diagram

BankAccount
- accountNumber: String
- accountName: String
- balance: double
- interestRate: double
+ deposit(amount: double): void
+ withdraw(amount: double): boolean
+ getBalance(): double
+ displayInfo(): void
SavingsAccount
- minBalance: double
+ applyInterest(): void
+ withdraw(amount: double): boolean
Bank
- accounts: ArrayList<BankAccount>
- bankName: String
+ addAccount(acc: BankAccount): void
+ findAccount(num: String): BankAccount
+ displayAll(): void
import java.util.ArrayList;
import java.util.Scanner;

/**
 * Kelas BankAccount sebagai class induk
 */
class BankAccount {
    protected String accountNumber;
    protected String accountName;
    protected double balance;
    protected double interestRate;
    protected static int totalAccounts = 0;
    
    public BankAccount(String accountNumber, String accountName, double initialDeposit) {
        this.accountNumber = accountNumber;
        this.accountName = accountName;
        this.balance = initialDeposit;
        this.interestRate = 0.02;  // 2% default interest
        totalAccounts++;
    }
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.printf("Deposit Rp %,.2f berhasil. Saldo sekarang: Rp %,.2f%n", amount, balance);
        } else {
            System.out.println("Jumlah deposit harus positif!");
        }
    }
    
    public boolean withdraw(double amount) {
        if (amount <= 0) {
            System.out.println("Jumlah penarikan harus positif!");
            return false;
        }
        if (amount > balance) {
            System.out.println("Saldo tidak mencukupi!");
            return false;
        }
        balance -= amount;
        System.out.printf("Penarikan Rp %,.2f berhasil. Saldo sekarang: Rp %,.2f%n", amount, balance);
        return true;
    }
    
    public double getBalance() {
        return balance;
    }
    
    public void applyInterest() {
        double interest = balance * interestRate;
        balance += interest;
        System.out.printf("Bunga Rp %,.2f ditambahkan. Saldo baru: Rp %,.2f%n", interest, balance);
    }
    
    public void displayInfo() {
        System.out.println("\n=== Informasi Rekening ===");
        System.out.println("Nomor Rekening: " + accountNumber);
        System.out.println("Nama Pemilik  : " + accountName);
        System.out.printf("Saldo         : Rp %,.2f%n", balance);
        System.out.printf("Suku Bunga    : %.1f%%%n", interestRate * 100);
    }
    
    public static int getTotalAccounts() {
        return totalAccounts;
    }
}

/**
 * Kelas SavingsAccount (turunan dari BankAccount)
 */
class SavingsAccount extends BankAccount {
    private double minBalance;
    
    public SavingsAccount(String accountNumber, String accountName, double initialDeposit, double minBalance) {
        super(accountNumber, accountName, initialDeposit);
        this.minBalance = minBalance;
        this.interestRate = 0.04;  // 4% untuk tabungan
    }
    
    @Override
    public boolean withdraw(double amount) {
        if (balance - amount < minBalance) {
            System.out.println("Penarikan gagal! Saldo minimal Rp " + minBalance + " harus dipertahankan.");
            return false;
        }
        return super.withdraw(amount);
    }
    
    @Override
    public void displayInfo() {
        super.displayInfo();
        System.out.printf("Saldo Minimal : Rp %,.2f%n", minBalance);
        System.out.println("Jenis Rekening: Tabungan");
    }
}

/**
 * Kelas Bank untuk mengelola koleksi rekening
 */
class Bank {
    private String bankName;
    private ArrayList<BankAccount> accounts;
    
    public Bank(String bankName) {
        this.bankName = bankName;
        this.accounts = new ArrayList<>();
    }
    
    public void addAccount(BankAccount account) {
        accounts.add(account);
        System.out.println("Rekening berhasil ditambahkan.");
    }
    
    public BankAccount findAccount(String accountNumber) {
        for (BankAccount acc : accounts) {
            if (acc.accountNumber.equals(accountNumber)) {
                return acc;
            }
        }
        return null;
    }
    
    public void displayAllAccounts() {
        System.out.println("\n=== DAFTAR SEMUA REKENING DI " + bankName + " ===");
        if (accounts.isEmpty()) {
            System.out.println("Belum ada rekening.");
            return;
        }
        for (int i = 0; i < accounts.size(); i++) {
            System.out.println("\n[" + (i + 1) + "] " + accounts.get(i).accountNumber + " - " + accounts.get(i).accountName);
        }
        System.out.println("\nTotal Rekening: " + BankAccount.getTotalAccounts());
    }
    
    public void displayBankInfo() {
        System.out.println("\n=== INFORMASI BANK ===");
        System.out.println("Nama Bank: " + bankName);
        System.out.println("Total Rekening: " + accounts.size());
        double totalSaldo = 0;
        for (BankAccount acc : accounts) {
            totalSaldo += acc.getBalance();
        }
        System.out.printf("Total Dana: Rp %,.2f%n", totalSaldo);
    }
}

/**
 * Main class untuk menjalankan aplikasi
 */
public class BankApp {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Bank bank = new Bank("Bank Java");
        
        while (true) {
            System.out.println("\n=== APLIKASI BANK JAVA ===");
            System.out.println("1. Buat Rekening Baru");
            System.out.println("2. Lihat Semua Rekening");
            System.out.println("3. Deposit");
            System.out.println("4. Withdraw");
            System.out.println("5. Cek Saldo");
            System.out.println("6. Informasi Bank");
            System.out.println("7. Aplikasi Bunga");
            System.out.println("0. Keluar");
            System.out.print("Pilih menu: ");
            
            int pilihan = scanner.nextInt();
            scanner.nextLine();  // consume newline
            
            switch (pilihan) {
                case 1:
                    System.out.print("Masukkan nomor rekening: ");
                    String noRek = scanner.nextLine();
                    System.out.print("Masukkan nama pemilik: ");
                    String nama = scanner.nextLine();
                    System.out.print("Masukkan setoran awal: ");
                    double setoran = scanner.nextDouble();
                    
                    System.out.print("Jenis rekening (1. Biasa / 2. Tabungan): ");
                    int jenis = scanner.nextInt();
                    
                    if (jenis == 1) {
                        BankAccount acc = new BankAccount(noRek, nama, setoran);
                        bank.addAccount(acc);
                    } else {
                        System.out.print("Masukkan saldo minimal: ");
                        double minSaldo = scanner.nextDouble();
                        SavingsAccount sav = new SavingsAccount(noRek, nama, setoran, minSaldo);
                        bank.addAccount(sav);
                    }
                    break;
                    
                case 2:
                    bank.displayAllAccounts();
                    break;
                    
                case 3:
                    System.out.print("Masukkan nomor rekening: ");
                    noRek = scanner.nextLine();
                    BankAccount acc = bank.findAccount(noRek);
                    if (acc != null) {
                        System.out.print("Masukkan jumlah deposit: ");
                        double jumlah = scanner.nextDouble();
                        acc.deposit(jumlah);
                    } else {
                        System.out.println("Rekening tidak ditemukan!");
                    }
                    break;
                    
                case 4:
                    System.out.print("Masukkan nomor rekening: ");
                    noRek = scanner.nextLine();
                    acc = bank.findAccount(noRek);
                    if (acc != null) {
                        System.out.print("Masukkan jumlah penarikan: ");
                        double jumlah = scanner.nextDouble();
                        acc.withdraw(jumlah);
                    } else {
                        System.out.println("Rekening tidak ditemukan!");
                    }
                    break;
                    
                case 5:
                    System.out.print("Masukkan nomor rekening: ");
                    noRek = scanner.nextLine();
                    acc = bank.findAccount(noRek);
                    if (acc != null) {
                        acc.displayInfo();
                    } else {
                        System.out.println("Rekening tidak ditemukan!");
                    }
                    break;
                    
                case 6:
                    bank.displayBankInfo();
                    break;
                    
                case 7:
                    System.out.print("Masukkan nomor rekening: ");
                    noRek = scanner.nextLine();
                    acc = bank.findAccount(noRek);
                    if (acc != null) {
                        acc.applyInterest();
                    } else {
                        System.out.println("Rekening tidak ditemukan!");
                    }
                    break;
                    
                case 0:
                    System.out.println("Terima kasih telah menggunakan aplikasi bank.");
                    System.out.println("Total transaksi hari ini: " + BankAccount.getTotalAccounts());
                    scanner.close();
                    System.exit(0);
                    
                default:
                    System.out.println("Pilihan tidak valid!");
            }
        }
    }
}

πŸ“š Latihan Akhir

Soal 1: Tambahkan fitur transfer antar rekening

Soal 2: Buat class CheckingAccount dengan fitur overdraft

Soal 3: Tambahkan validasi nomor rekening unik

Soal 4: Buat laporan transaksi per rekening

B GLOSARIUM

API
Application Programming Interface - kumpulan method dan class yang siap digunakan.
Array
Struktur data yang menyimpan multiple nilai dengan tipe yang sama.
Bytecode
Kode hasil kompilasi Java yang dijalankan oleh JVM.
Class
Blueprint untuk membuat object.
Constructor
Method khusus yang dipanggil saat object dibuat.
Encapsulation
Menyembunyikan detail implementasi dan melindungi data.
Garbage Collection
Proses otomatis membersihkan memory yang tidak digunakan.
IDE
Integrated Development Environment - software untuk menulis kode.
Inheritance
Mewarisi sifat dari class induk.
JVM
Java Virtual Machine - menjalankan bytecode Java.
Method
Fungsi dalam class.
Object
Instance dari class.
Polymorphism
Kemampuan object memiliki banyak bentuk.
Primitive
Tipe data dasar seperti int, double, boolean.

C DAFTAR PUSTAKA

Buku Referensi

  1. Deitel, P. & Deitel, H. (2022). Java How to Program (11th ed.). Pearson.
  2. Horstmann, C. S. (2022). Core Java Volume I: Fundamentals (12th ed.). Oracle Press.
  3. Bloch, J. (2018). Effective Java (3rd ed.). Addison-Wesley.
  4. Schildt, H. (2021). Java: A Beginner's Guide (9th ed.). McGraw-Hill.

Sumber Online

  • Oracle Java Documentation - https://docs.oracle.com/javase/
  • Java Tutorials by Oracle - https://docs.oracle.com/javase/tutorial/
  • Baeldung - https://www.baeldung.com/
  • GeeksforGeeks Java - https://www.geeksforgeeks.org/java/

D INDEX

A
  • Abstract class 65
  • Arithmetic operators 29
  • Array 60
B
  • boolean 22, 40
  • Break 57
  • byte 22
C
  • char 22
  • Class 4, 10
  • Comments 16
  • Constructor 18
  • Continue 57
D
  • Data types 22
  • double 22
E
  • Encapsulation 65
  • Enhanced for loop 53
  • Enum 40
F
  • float 22
  • For loop 53
I
  • if-else 43
  • Inheritance 65
  • int 22
  • Interface 65
J
  • JDK 1, 7
  • JRE 1
  • JVM 1
L
  • long 22
M
  • main method 4, 10
  • Math class 37
  • Method 4, 10
O
  • Object 4, 18
  • Operators 29
  • Output 13
P
  • Package 10
  • Polymorphism 65
  • Primitive types 22
S
  • Scanner 65
  • short 22
  • String 33
  • Switch 47
T
  • Type casting 26
V
  • Variables 18
W
  • While loop 50